package extras;

import persistencia.BaseDatos;
import webService.AccesoWebService;
import android.support.v4.app.*;
import com.androidmodule.onthego.R;
import com.google.android.gms.gcm.GoogleCloudMessaging;

import fragments.FragmentListaReservas;
import activities.ActivityPromocionesHot;
import activities.MainActivity;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.RingtoneManager;
import android.net.Uri;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder;

public class GcmBroadCastReceiver extends BroadcastReceiver {
	static final String TAG = "GCMDemo";
	public static final int NOTIFICATION_ID = 4;
	private NotificationManager mNotificationManager;
	final Uri defaultNotificationSound = RingtoneManager
			.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
	NotificationCompat.Builder builder;
	Context contexto;

	@Override
	public void onReceive(Context parametroContexto, Intent intentRecivido) {
		if (leerPreferencias.readNotificarPromocionHot(parametroContexto)) {
			if (leerPreferencias.readConexionValida(parametroContexto)) {
				GoogleCloudMessaging gcm = GoogleCloudMessaging
						.getInstance(parametroContexto);
				contexto = parametroContexto;
				String messageType = gcm.getMessageType(intentRecivido);
				if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR
						.equals(messageType)) {
					sendNotification("Send error: "
							+ intentRecivido.getExtras().toString());
				} else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED
						.equals(messageType)) {
					sendNotification("Deleted messages on server: "
							+ intentRecivido.getExtras().toString());
				} else {
					//MENSAJE RECIBIDO
					boolean mandar;
					String[] mensaje = intentRecivido.getExtras()
							.getCharSequence("payload").toString().split(",");
					
					if (AccesoWebService.PUSH_PROMOCIONHOT.equals(mensaje[0])) {
						String categorias = leerPreferencias.readCategoria(
								parametroContexto,
								leerPreferencias.CATEGORIA_PROMOCION_HOT);
						String tipoPago = leerPreferencias.readTipoPago(parametroContexto, leerPreferencias.TIPO_DE_PAGO_PROMOCION_HOT);

						if (!categorias.equals("0,0")) {
							
							// busco si tiene la categoria
							if (categorias.contains(mensaje[1])) {
								//sendNotification(mensaje[2]);
								//ahora validamos el tipo de pago
								if(!tipoPago.equals("0,0")){
									if(tipoPago.contains(mensaje[2])){
										sendNotification(mensaje[3]);
									}
									
								}
								else{
									sendNotification(mensaje[3]);
								}
							}
						} else {
							// es 0,0 no filtra por categorias
							if(!tipoPago.equals("0,0")){
								if(tipoPago.contains(mensaje[2])){
									sendNotification(mensaje[3]);
								}
								
							}
							else{
								sendNotification(mensaje[3]);
							}
						}
					} else {
						BaseDatos base = new BaseDatos(parametroContexto);
						base.eliminarReserva(mensaje[1]);
						sendNotification(mensaje[2]);
					}

				}
			}
		}
	}

	// Put the GCM message into a notification and post it.
	private void sendNotification(String msg) {
		mNotificationManager = (NotificationManager) contexto
				.getSystemService(Context.NOTIFICATION_SERVICE);
		NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
				contexto)
				.setSmallIcon(R.drawable.hot_prom_notification)
				.setContentTitle(contexto.getString(R.string.app_name))
				.setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
				.setSound(
						Uri.parse(leerPreferencias
								.readTonoNotificacion(contexto)))
				.setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
				.setAutoCancel(true)
				.setContentText(msg);
		Intent resultIntent = new Intent(contexto, ActivityPromocionesHot.class);
		TaskStackBuilder stackBuilder = TaskStackBuilder.create(contexto);
		// Adds the back stack for the Intent (but not the Intent itself)
		stackBuilder.addNextIntentWithParentStack(resultIntent);
		// Adds the Intent that starts the Activity to the top of the stack
		//stackBuilder.addNextIntent(resultIntent);
		PendingIntent pendingIntent = stackBuilder.getPendingIntent(0,
				PendingIntent.FLAG_CANCEL_CURRENT);
		mBuilder.setContentIntent(pendingIntent);
		mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
	}
}
